/**
 * 处理重复点击
 * @param {Object} self 当前引用者对象
 * @param {number} time 延迟时间，默认2000毫秒
 */
export function buttonClicked(self, time = 2000) {
  if (!self) return;
  self.buttonClicked = true;
  setTimeout(() => {
    self.buttonClicked = false;
  }, time);
}

/**
 * 计算两个经纬度的距离(千米)
 * @param {number} lat1 第一个点的纬度
 * @param {number} lng1 第一个点的经度
 * @param {number} lat2 第二个点的纬度
 * @param {number} lng2 第二个点的经度
 * @returns {number} 距离（千米）
 */
export function mapDistance(lat1, lng1, lat2, lng2) {
  const radLat1 = (lat1 * Math.PI) / 180.0;
  const radLat2 = (lat2 * Math.PI) / 180.0;
  const a = radLat1 - radLat2;
  const b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
  let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  s = s * 6378.137; // EARTH_RADIUS;
  s = Math.round(s * 10000) / 10000;
  return s;
}

/**
 * 封装showModal（无取消按钮）
 * @param {string} title 标题
 * @param {string} content 内容
 * @param {string} confirmText 确认按钮文字
 * @param {Function} success 成功回调
 */
export function myShowModalNoCancel(title, content, confirmText, success) {
  uni.hideToast();
  myBaseShowModal(title, content, false, '取消', '#000000', confirmText, '#576B95', success);
}

/**
 * 封装showModal（有确认回调，有取消按钮）
 * @param {string} title 标题
 * @param {string} content 内容
 * @param {string} cancelText 取消按钮文字
 * @param {string} confirmText 确认按钮文字
 * @param {Function} success 成功回调
 */
export function myShowModal(title, content, cancelText, confirmText, success) {
  myBaseShowModal(title, content, true, cancelText, '#000000', confirmText, '#576B95', success);
}

/**
 * 封装showModal
 * @param {string} title 标题
 * @param {string} content 内容
 * @param {boolean} showCancel 是否显示取消按钮
 * @param {string} cancelText 取消按钮文字
 * @param {string} cancelColor 取消按钮颜色
 * @param {string} confirmText 确认按钮文字
 * @param {string} confirmColor 确认按钮颜色
 * @param {Function} successfunction 成功回调
 */
export function myBaseShowModal(title, content, showCancel, cancelText, cancelColor, confirmText, confirmColor, successfunction) {
  uni.showModal({
    title,
    content,
    showCancel,
    cancelText,
    cancelColor,
    confirmText,
    confirmColor,
    success(res) {
      if (res.confirm && successfunction) {
        successfunction(res);
      }
    },
    fail(res) {
      console.error('uni.showModal调用失败！content:', content, 'res:', res);
    }
  });
}

/**
 * 页面跳转
 * @param {string} url 跳转的URL
 */
export function jump(url) {
  const pages = getCurrentPages();
  if (pages.length < 5) {
    uni.navigateTo({ url });
  } else {
    uni.redirectTo({ url });
  }
}
